package model;

import java.util.ArrayList;

/* 
 * Attribut : main c'est une liste de carte que le joueur a dans les mains
 * 
 * Fonctions : piocher(Carte c) : ajoute la carte c à la main
 *             défausser(Carte c) : supprime la carte c de la main
 *             poser(Carte c): supprime c de la main et la retourne
 *             deselectionner() : met le boolean de selection de toutes les cartes à faux 
 */


/**
 * Classe qui représente la main du joueur. Elle contient les cartes que le
 * joueur possède dans sa main au début du jeu, et celle qu'il piochera au cours
 * de celui ci.
 *
 * @author Antoine Thorr, Joana Santos, Samy Rida, Vicky Ngo Pagbe
 */
public class Main {

    private ArrayList<Carte> main;

    /**
     * Constructeur de la classe Main. Créer la liste qui contiendra les cartes.
     */
    public Main() {
        this.main = new ArrayList<>();
    }

    /**
     * Permet d'ajouter une Carte c à la Main du joueur.
     *
     * @param c
     */
    public void piocher(Carte c) {
        this.main.add(c);
    }

    /**
     * Permet lorsque le joueur pose une carte de la retirer de sa Main.
     *
     * @param c
     */
    public void defausser(Carte c) {
        this.main.remove(c);
    }

    /**
     * Permet de poser une Carte c passé en paramètre. La méthode enlève la
     * carte de la Main du joueur, puis retourne la carte posée.
     *
     * @param c La carte que le joueur désire poser
     */
    public void poser(Carte c) {
        this.main.remove(c);
    }

    /**
     * Retourne le nombre de cartes que le joueur possède dans sa main.
     *
     * @return Nombre de cartes présentes dans la main.
     */
    public int nombreCartes() {
        return this.main.size();
    }

    /**
     * Retourne la Carte présente à l'indice passé en paramètre.
     *
     * @param indice
     * @return Carte présente à l'indice indiqué.
     */
    public Carte getCarte(int indice) {
        return this.main.get(indice);
    }

    /**
     * Retourne la Main du joueur
     *
     * @return Liste contenant les cartes présentes dans la main du joueur.
     */
    public ArrayList<Carte> getMain() {
        return this.main;
    }

    /**
     * Rédéfinition de la méthode toString afin d'afficher la Main.
     *
     * @return Les cartes de la main.
     */
    @Override
    public String toString() {
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < nombreCartes(); i++) {
            str.append(getCarte(i));
            str.append("/");
        }
        return str.toString();
    }

    /**
     * Permet de déselectionner toute les cartes de la main en mettant le
     * boolean de selection de toutes les cartes à faux
     */
    public void deselectionner() {
        for (Carte c : this.main) {
            c.setSelection(false);
        }
    }
}
